/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rna;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/**
 *
 * @author Igo Amauri
 */
public class Arquivo {

    String linha;
    double[] dadoDouble;
    ArrayList<double[]> arrayDouble = new ArrayList<double[]>();
    ArrayList<double[]> arrayNormalizado = new ArrayList<double[]>();
    ArrayList<double[]> arrayEntradas = new ArrayList<double[]>();
    ArrayList<Double> arraySaidaDesejada = new ArrayList<Double>();

    public void lerArquivo() throws FileNotFoundException, IOException{

        FileReader file = new FileReader("basededados.data");
        BufferedReader dadosLidos = new BufferedReader(file);


        linha = dadosLidos.readLine();
        String[] dadoString = null;

        while(linha != null){
            if(!linha.contains("?")){

                dadoString = linha.split(",");
                dadoDouble = new double[dadoString.length - 1];
                dadoDouble = stringToDouble(dadoString);
                arrayDouble.add(dadoDouble);
            }
            linha = dadosLidos.readLine();
        }

        arrayNormalizado = normalizar(arrayDouble);
        separarSaidaDesejada();

//        for(int i=0; i<arrayEntradas.get(0).length;i++){
//            System.out.println("Entradas: " + arrayEntradas.get(0)[i]);
//        }
//        System.out.println("Saida: " + arraySaidaDesejada.get(0));

    }

    public void separarSaidaDesejada(){
        double[] auxDadoDouble;

        for(int i=0;i<arrayNormalizado.size();i++){
            double[] auxEntrada = new double[dadoDouble.length-1];
            auxDadoDouble = arrayNormalizado.get(i);

            for(int j=0;j<auxDadoDouble.length;j++){
                if(j==auxDadoDouble.length-1){
                    arraySaidaDesejada.add(auxDadoDouble[j]);
                }
                else
                    auxEntrada[j] = auxDadoDouble[j];
            }
            arrayEntradas.add(auxEntrada);
        }
    }

    public double[] stringToDouble(String[] vetor){
        double[] convertido = new double[vetor.length - 1];

        for(int i=0;i<vetor.length -1 ;i++){
            convertido[i] = Double.parseDouble(vetor[i+1]);
        }
        return convertido;
    }

    public ArrayList<double[]> normalizar(ArrayList<double[]> dado){
        double resultadoDivisao;
        double denominador;

        for(int i=0; i<dado.get(i).length;i++){

            denominador = obterMaiorValor(dado, i);
            for(int j=0;j<dado.size();j++){
                resultadoDivisao = dado.get(j)[i] / denominador;
                dado.get(j)[i] = resultadoDivisao;
            }
        }

        return dado;
    }

    public double obterMaiorValor (ArrayList<double[]> dado, int coluna){
        double maiorValor=0.0, tempValor=0.0;

        for(int j = 0; j<dado.size();j++){
            tempValor = dado.get(j)[coluna];
            if(tempValor > maiorValor){
                maiorValor = tempValor;
            }
        }
        return maiorValor;

    }

}
